/*
 *
 */
package org.jiscinvolve.astrodabis.barberry.common.data;

import org.jiscinvolve.astrodabis.barberry.common.core.Job;
import org.jiscinvolve.astrodabis.barberry.common.core.Tag;
import org.jiscinvolve.astrodabis.barberry.common.core.Owned;
import org.jiscinvolve.astrodabis.barberry.common.core.Tagged;
import org.jiscinvolve.astrodabis.barberry.common.core.Account;
import org.jiscinvolve.astrodabis.barberry.common.core.Tracked;
import org.jiscinvolve.astrodabis.barberry.common.core.Identified;
import org.jiscinvolve.astrodabis.barberry.common.core.Identifier;

/**
 *
 */
public interface RowTag
extends Identified, Tracked, Tagged
    {

    public interface Factory
        {

        public Identifier ident(String ident);

        public RowTag create(TapRow row, Job job, Tag tag);
        public RowTag createQuick(TapRow row, Job job, Tag tag);

        public RowTag create(TapRow row, Job job, Tag tag, Double value);
        public RowTag createQuick(TapRow row, Job job, Tag tag, Double value);

        public RowTag select(Identifier ident);

        public Iterable<RowTag> select();

        public Iterable<RowTag> select(Tag tag);

        public Iterable<RowTag> select(Job job);
        public Iterable<RowTag> select(Job job, int limit);

        public Iterable<RowTag> select(TapRow row);

        public Iterable<RowTag> select(TapRow row, Tag tag);

        public void delete(Tag tag);
        public void delete(Job job);

        }

    public TapRow row();

    }

